

P_i() {

    lock(&mutex);
    if B is empty {
        C1;
    }
    unlock(&mutex);

}




P1() {
    C1;
    signal(sem_P1P2);    // 通知 P2，可以读取数据分组
}

P2() {
    wait(sem_P1P2);    // 等待 P1 写入数据分组
    C2;
}

P1() {
    wait(mutex); // 互斥执行 C3
    C3;
    V(mutex);  
}

P2() {
    wait(mutex); // 互斥执行 C3
    C3;
    V(mutex);  
}